﻿using System.Collections.Generic;

namespace Opo.Perspective.Core
{
    /// <summary>
    /// Represents a pipeline for processing objects
    /// </summary>
    public interface IPerspectivePipeline<T>
    {
        /// <summary>
        /// Gets or sets the plugins that are processed.
        /// </summary>
        /// <value>The plugins.</value>
        IList<IPerspectivePipelinePlugin<T>> Plugins { get; set; }

        /// <summary>
        /// Processes the object.
        /// </summary>
        /// <param name="obj">The object to process.</param>
        /// <returns></returns>
        T Process(T obj);
    }
}
